package com.catazy.wanandroid.common_base

import android.app.Application
import com.alibaba.android.arouter.launcher.ARouter
import com.catazy.wanandroid.common_base.constants.Constants
import com.catazy.wanandroid.common_base.ext.Mmkv
import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.Logger
import com.orhanobut.logger.PrettyFormatStrategy
import com.tencent.mmkv.MMKV

/**
 * 作者: Tao
 * 日期: 2024/4/10
 * 时间: 10:38
 * 描述: Application 基类
 */
open class BaseApplication : Application() {

    companion object {
        private lateinit var instance: Application

        fun getContext(): Application {
            return instance
        }
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
        // 初始化 MMKV
        MMKV.initialize(this)
        // 初始化日志配置
        initLogConfig()
        // 初始化 ARouter
        if (BuildConfig.DEBUG) { // 这两行必须写在init之前，否则这些配置在init过程中将无效
            ARouter.openLog() // 打印日志
            ARouter.openDebug() // 开启调试模式(如果在InstantRun模式下运行，必须开启调试模式！线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(this)
    }

    private fun initLogConfig() {
        val formatStrategy = PrettyFormatStrategy.newBuilder()
            .showThreadInfo(false)  // 是否显示线程信息. 默认值 true
            .methodCount(1)         // 显示的方法行数. 默认值 2
            .methodOffset(7)        // 隐藏内部方法调用到偏移量. 默认值 5
            .tag(Constants.APP_TAG)   // 全局标签. 默认 PRETTY_LOGGER
            .build()
        Logger.addLogAdapter(object : AndroidLogAdapter(formatStrategy) {
            override fun isLoggable(priority: Int, tag: String?): Boolean {
                return BuildConfig.DEBUG
            }
        })
    }
}